package com.xyazm.core.config;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "mall.core.segment")
public class SegmentConfigProperties {

    /**
     * 最大步长不超过100,0000
     */
    private int maxStep = 1000000;

    /**
     * 默认一个Segment会维持的时间为15分钟
     * <p>
     * 如果在15分钟内Segment就消耗完了，则步长要扩容一倍，但不能超过MAX_STEP
     * 如果在超过15*2=30分钟才将Segment消耗完，则步长要缩容一倍，但不能低于MIN_STEP，MIN_STEP的值为数据库中初始的step字段值
     */
    private long segmentDuration = 15 * 60 * 1000L;

    /**
     * 更新因子
     * <p>
     * 更新因子=2时，表示成倍扩容或者折半缩容
     */
    private int expandFactor = 2;

    /**
     * 下一次异步更新比率因子
     */
    private double nextInitFactor = 0.9;

}
